package TemplateMethodPattern;

/**
 * 模板方法模式
 * 程序员父类(抽象父类)
 * 4个抽象方法：起床，吃饭，写代码，睡觉
 * 2个具体的方法：锻炼半小时，处理过程
 */
public abstract class Coder {
    public abstract void getup();//起床

    public abstract void eat();//吃饭

    public abstract void code();//写代码

    public abstract void sleep();//睡觉

    public void exercise() {
        System.out.println("锻炼半小时");
    }

    //模板（定义了各个方法的调用顺序和一些其他操作）
    public void TemplateMethod() {
        getup();
        eat();
        if (isWork()) {
            code();//上班就写代码，不上班不写代码
        }
        exercise();
        sleep();
    }

    //钩子方法：判断是否上班
    public boolean isWork() {
        return true;//设置默认值
    }
}
